#!usr/bin/env python  
# -*- coding:utf-8 -*-
""" 
@author:robot
@file: solution.py 
@version:
@time: 2024/01/21 
"""
import heapq


class Item:
    def __init__(self, a, b, c):
        self.total = a  # 总和
        self.idx = b  # 当前索引
        self.next = c  # 下一个元素

    def __lt__(self, other):
        return self.next < other.next  # 定义小于运算符，用于比较对象的 next 属性


def main():
    num, maxCount = map(int, input().split())  # 读取输入的两个整数，表示元素数量和最大输出数量
    values = sorted(map(int, input().split()))  # 读取元素值列表，并使用 sorted() 函数进行排序

    pq = [Item(0, 0, values[0])]  # 创建一个堆队列，初始放入一个 Item 对象
    while pq and maxCount > 0:  # 当堆队列不为空且还有输出次数剩余时
        current = heapq.heappop(pq)  # 弹出堆队列中的最小元素
        print(current.next)  # 输出当前弹出元素的 next 属性值
        maxCount -= 1  # 减少剩余输出次数

        if current.idx < num - 1:  # 如果当前索引小于总元素数量减一（即还有更多元素可以处理）
            # 创建两个新的 Item 对象，分别表示当前索引+1的元素加入 total 或 next
            heapq.heappush(pq, Item(current.total, current.idx + 1, current.total + values[current.idx + 1]))
            heapq.heappush(pq, Item(current.next, current.idx + 1, current.next + values[current.idx + 1]))


if __name__ == "__main__":
    """

```text
5 6
1 1 2 3 3
```

输出

```text
1
1
2
2
3
3
```

    """
    main()
